package ru.spb.nicetu.altx.mnemo.cell;

import java.io.Serializable;

/**
 * "Ячейка в NODE-е", или дескритор, описывающий значение в ячейке NODE-а
 * (аналог формального параметра функции)
 * 
 * @author serg
 */
public interface INodeCell extends Serializable, Cloneable {

  public enum Categories {
    INPUT, // Показывает, что ячейка входная для Node'а
    OUTPUT, // Показывает, что ячейка выходная для Node'а
    SETTING; // Показывет, что ячейка является настроечный параметром
  }

  /**
   * @return имя ячейки
   */
  String getName();

  /**
   * @return Класс значения, ассоциированного с этой ячейкой (напр.
   *         "proto.mnemo.types.DoubleScalar")
   */
  String getValueClassName();

  /**
   * @return Возвращает категорию ячейки
   */
  Categories getCategorie();

  /**
   * @return true - если ячейка является входной, иначе false
   */
  boolean isInput();

  /**
   * @return true - если ячейка является выходной, иначе false
   */
  boolean isOuput();

  /**
   * @return true - если ячейка является настроечным параметром
   */
  boolean isSetting();

  /**
   * @return "Тип ячейки", или символическое имя типа значения, ассоциированного
   *         с этой ячейкой (напр. "Scalar")
   */
  String getValueTypeName();

  /**
   * @return идентификатор ячейки, локальный для узла, которому она принадлежит
   */
  String getCellID();

  /**
   * Устанавливает идентификатор ячейки, локальный для узла, которому она
   * принадлежит
   */
  void setCellID(String IDCell);

  INodeCell clone();

}
